﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace Esint.Common.Data.SqlDAL
{
    /// <summary>
    /// 封装事务类（为了解决原本SQLHelper中事务多次执行存在的问题）
    /// </summary>
    public class DBTransWrapper : IDbTransaction
    {
        public DBTransWrapper()
        { 
        }

        public DBTransWrapper(IDbConnection Connection)
        {
            SysTrans = Connection.BeginTransaction();
        }

        public IDbTransaction SysTrans { get; set; }

        // 摘要:
        //     指定要与事务关联的 Connection 对象。
        //
        // 返回结果:
        //     要与事务关联的 Connection 对象。
        public IDbConnection Connection { get; set; }
        //
        // 摘要:
        //     指定该事务的 System.Data.IsolationLevel。
        //
        // 返回结果:
        //     该事务的 System.Data.IsolationLevel。默认为 ReadCommitted。
        public IsolationLevel IsolationLevel { get; set; }

        // 摘要:
        //     提交数据库事务。
        //
        // 异常:
        //   System.Exception:
        //     尝试提交事务时出错。
        //
        //   System.InvalidOperationException:
        //     事务已提交或回滚。- 或 -连接已断开。
        public void Commit()
        {
            SysTrans.Commit();
            SysTrans.Dispose();
            System.GC.Collect();
        }
        //
        // 摘要:
        //     从挂起状态回滚事务。
        //
        // 异常:
        //   System.Exception:
        //     尝试提交事务时出错。
        //
        //   System.InvalidOperationException:
        //     事务已提交或回滚。- 或 -连接已断开。
        public void Rollback()
        {            
            SysTrans.Rollback();
            SysTrans.Dispose();
            System.GC.Collect();
        }

        // 摘要:
        //     执行与释放或重置非托管资源相关的应用程序定义的任务。
        public void Dispose()
        {
            this.Dispose();
            System.GC.Collect();
        }
    }
}
